package collection.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
 /*
          常见的中间环节:
          1.map:
            map方法接收一个lambda表达式，将集合中每个元素都经历一次该表达式，并将表达式处理的结果替换该元素
          2.filter:
            filter方法可以过滤流中的每个元素，仅保留符合lambda表达式要求的元素
          3.distinct:
            distinct方法可以过滤重复的元素
          4.sorted:
            sorted方法可以对流中的元素排序，该方法接收一个lambda表达式用于定义Comparator
         */

public class StreamApiDemo {
    public static void main(String[] args) {
        Random rand = new Random();
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++){
            list.add(rand.nextInt(10));
        }
        System.out.println(list);

        //将每个集合元素扩大3倍
        List<Integer> list2 = list.stream().map(e->e*3).collect(Collectors.toList());

        //金保留集合中的所有偶数
        List<Integer> list1 = list.stream().filter(e->e%2==0).collect(Collectors.toList());

        //对集合元素去重
        List<Integer> list10 = list.stream().distinct().collect(Collectors.toList());

        //对集合元素降序排列
        List<Integer> list3 = list.stream().sorted((e1,e2)->e2-e1).collect(Collectors.toList());

        //对集合每个元素扩大3倍并获取其中所有的偶数然后去除集合重复元素并降序排列
        List<Integer> list4 = list.stream().map(e->e*3).filter(e->e%2==0).distinct().sorted((e1,e2)->e2-e1).collect(Collectors.toList());

    }
}
